package ru.emms.codemeter.metrics.calculators;

import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiUtil;
import ru.emms.codemeter.metrics.MetricUtils;

import java.util.Collection;

/**
 * Created by IntelliJ IDEA.
 * User: nastya.kuz
 * Date: 02.08.2010
 * Time: 15:54:25
 * <p/>
 * Вычисление метрики "Количество абстрактных классов"
 */
public class AbstractClassCountMetricCalculator
        implements MetricCalculator {

    private Logger log = Logger.getInstance(getClass().getName());

    /**
     * вычисляет количество абстрактных классов  для данного списка исходников
     *
     * @param sources коллекция исходников
     *
     * @return число абстрактных классов
     */
    @Override
    public Long calculate(Collection<PsiFile> sources) {
        Long abstractClassCount = 0L;
        for (PsiClass myClass : MetricUtils.getClassesIn(sources)) {
            boolean isAbstract = PsiUtil.isAbstractClass(myClass) && !myClass.isInterface();
            if(isAbstract) {
                abstractClassCount++;
            }
        }
        log.debug("количество абстрактных классов: " + abstractClassCount);
        return abstractClassCount;
    }

    public String toString() {
        return "AC";
    }

}
